<?php
/**
 * Created by PhpStorm.
 * User: xh
 * Date: 2019/12/16
 * Time: 2:23 PM
 */

namespace weChat\pay;


class OrderQuery extends Pit
{
    //公众账号ID	appid	是	String(32)	wxd678efh567hg6787	微信支付分配的公众账号ID（企业号corpid即为此appId）
    //商户号	mch_id	是	String(32)	1230000109	微信支付分配的商户号
    //微信订单号	transaction_id	二选一	String(32)	1009660380201506130728806387	微信的订单号，建议优先使用
    //商户订单号	out_trade_no	String(32)	20150806125346	商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。 详见商户订单号
    public $transactionId = '';
    public $outTradeNo = '';
    //随机字符串	nonce_str	是	String(32)	C380BEC2BFD727A4B6845133519F3AD6	随机字符串，不长于32位。推荐随机数生成算法
    //签名	sign	是	String(32)	5K8264ILTKCH16CQ2502SI8ZNMTM67VS	通过签名算法计算得出的签名值，详见签名生成算法
    //签名类型	sign_type	否	String(32)	HMAC-SHA256	签名类型，目前支持HMAC-SHA256和MD5，默认为MD5

    /** 查询信息
     * @param array $queryInfo
     */
    public function Handle(array &$queryInfo): void
    {
        $xml = $this->disposalData();
        $returnXml = '';
        $this->curl($returnXml, $xml, 'https://api.mch.weixin.qq.com/pay/orderquery');
        $data = [];
        $res = $this->toArray($returnXml, $data);
        if (empty($res)) {
            $this->exception('xml数据不存在');
        }
        if ($data['return_code'] != 'SUCCESS') {
            $this->exception('返回状态码非SUCCESS，错误信息:' . $data['return_msg']);
        }
        $queryInfo = $data;
    }

    /** 整理数据
     * @return string
     */
    protected function disposalData(): string
    {
        $parameter['appid'] = $this->appId;
        $parameter['mch_id'] = $this->mchId;
        $parameter['nonce_str'] = $this->nonceStr();
        $parameter['sign_type'] = $this->signType;
        if (empty($this->transactionId) && empty($this->outTradeNo)) {
            $this->exception('必须要有 transaction_id--微信订单号 或 out_trade_no--商户订单号 ');
        }
        if ($this->transactionId) {
            $parameter['transaction_id'] = $this->transactionId;
        }
        if ($this->outTradeNo) {
            $parameter['out_trade_no'] = $this->outTradeNo;
        }
        $parameter['sign'] = $this->sign($parameter, $this->signType);
        return $this->toXml($parameter);
    }
}